Partagez vos fichiers sur un réseau Linux avec NFS

NFS est un protocole historique de partage de fichiers entre machines UNIX (famille de systèmes d’exploitation dont Linux et Mac OS X font partie). Si vous souhaitez partager des fichiers avec des clients Windows, le partage par Samba que nous verrons dans le prochain chapitre pourrait être plus adapté.

Vous allez utiliser NFS 4 qui apporte beaucoup d’améliorations par rapport aux versions précédentes. Une des plus notables est l’utilisation d’un port TCP unique et configurable là où les versions précédentes utilisaient plusieurs ports TCP, parfois alloués dynamiquement, ce qui rendait difficile l’utilisation de NFS avec un pare-feu.

Le serveur virtuel que vous avez monté n’a pas de pare-feu mais si c’était le cas, le port par défaut alloué à NFSv4 et qu’il faudrait ouvrir serait le port TCP 2049 entrant.

NFS est prévu pour fonctionner sur un réseau local. Vous ne devriez pas l’utiliser pour partager des fichiers sur internet sauf si vous passez par un VPN. Même dans ce cas, il y a souvent des solutions plus adaptées.

Dans ce chapitre, vous allez partager par NFS les deux partitions de données sous LVM+RAID :

Configurez le serveur

Tout d’abord, vous allez créer une arborescence de partage  /export  dans laquelle seront montés tous les répertoires à partager. Ça n’est pas une étape obligatoire mais plutôt une “bonne pratique”. Le fait de séparer votre arborescence partagée permet d’avoir une configuration plus claire et offre un niveau de sécurité supérieur :

$ sudo mkdir /export

$ sudo mkdir /export/home

$ sudo mkdir /export/share

Vous allez monter  /var/data1  dans  /export/home  et  /var/data2  dans  /export/shared  grâce à un montage de type “bind”. C’est une option de montage qui permet de monter plusieurs fois un système de fichiers :  /var/data1  et  /export/home  pointeront vers les mêmes données, comme deux archers qui viseraient la même cible. Pour cela, rajoutez dans votre fichier  /etc/fstab  :

/var/data1 /export/home none rw,bind 0 0

/var/data2 /export/shared none rw,bind 0

On peut alors réaliser ces montages par un  mount -a  .

Une fois notre arborescence créée, installez le serveur NFS par la commande :

$ sudo apt-get install nfs-server

Vos partages NFS sont définis dans le fichier   /etc/exports  . Chaque ligne commençant par  #  est un commentaire. Ajoutez les lignes suivantes :

/export        192.168.0.0/24(ro,sync,root_squash,no_subtree_check,fsid=0)

/export/home 192.168.0.0/24(rw,sync,root_squash,no_subtree_check)

/export/shared 192.168.0.0/24(rw,sync,all_squash,no_subtree_check)

Pour chaque ligne, on indique le répertoire à partager, puis une tabulation et le réseau avec lequel on souhaite partager ce répertoire et les options de partage entre parenthèse. On peut indiquer plusieurs réseaux avec chacun leurs propres options de partage en les séparant par des espaces.

Voici le détail des options qu’on a utilisées :

ro

le partage est en lecture seule

rw

le partage est en lecture-écriture

sync

pour indiquer que les opérations sont effectuées les unes à la suite des autres. C’est conseillé pour les partages en lecture-écriture. Pour les partages en lecture seule, on peut utiliser l’option contraire async pour indiquer qu’une opération de lecture peut commencer avant la fin de l’opération précédente.

no_subtree_check

l’option contraire “subtree_check” fait une vérification supplémentaire pour vérifier qu’un fichier est bien dans l’arborescence de partage (ce qui n’est pas toujours si évident à vérifier dans des cas complexes). Cette option était l’option par défaut mais elle causait plus de problèmes qu’elle n’en résolvait. L’option par défaut et recommandée est maintenant “no_subtree_check” sauf pour des partages en lecture seule où les renommages de fichiers sont rares. Vous aurez un avertissement de NFS si vous n’indiquez pas cette option explicitement.

fsid=0

identifie un système de fichier par un code. Ça peut être utile pour identifier certains partages qui ne sont pas identifiés par des périphériques dans /dev mais surtout le code spécial “0” indique que c’est la racine de notre répertoire de partage

root_squash

c’est une option de sécurité. Si on partage des fichiers appartenant à root sur le serveur NFS, on n’a pas forcément envie que l’utilisateur root des clients soit propriétaire de ces fichiers et ait tous les droits dessus. L’option root_squash indique donc que l’utilisateur root des clients NFS sera reconnu comme l’utilisateur “nobody” d’UID 65534 et de groupe “nogroup” de GID 65534.

all_squash

comme pour l’option précédente mais tous les utilisateurs seront reconnus comme l’utilisateur “nobody” avec le groupe “nogroup”

Vous pouvez valider vos changements de configuration et vérifier vos partages actifs par les commandes :

$ sudo exportfs -r

$ sudo showmount -e localhos

Il ne nous reste plus qu’à utiliser nos partages sur notre client.

Configurez le client

Sur votre client, pour pouvoir monter votre partage réseau, vous devrez installer le paquet  nfs-common  et créer le point de montage de votre partage NFS :

$ sudo apt-get install nfs-common

$ sudo mkdir /mnt/resea

Vous pouvez alors indiquer la ligne suivante dans votre fichier /etc/fstab pour monter votre partage réseau :

vm-serveur:/ /mnt/reseau nfs4 rw,hard,intr,_netdev 0 0

On indique donc qu’on veut monter la racine  /  du partage réseau sur vm-serveur dans  /mnt/reseau  . Le système de fichier est de type  nfs4  et voici le détail des options :

rw

le montage est en lecture-écriture

hard

signifie que le montage sera traité comme le montage d’un périphérique standard. Il sera permanent et ne sera pas démonté automatiquement au bout d’un certain temps d’inactivité. L’option contraire est “soft”

intr

signifie “interruptible”, c’est à dire qu’une opération peut être interrompue en attente de réponse du serveur. Option vivement conseillée, car sans cette option et en cas de problème à joindre le serveur (coupure réseau par exemple), le client pourrait rester “coincé en attente” tant que la connexion n’est pas rétablie ou qu’il n’a pas été rebooté.

_netdev

Vous pouvez alors monter votre partage réseau par la commande  mount -a  . Dans  /mnt/reseau  , vous retrouvez bien vos deux répertoires partagés  home  et  shared  mais si vous essayez d’écrire dedans, vous voyez que vous n’avez pas les droits. Pire, même avec un  sudo  , vous n’avez pas les droits. C’est normal, sur le serveur ces répertoires appartiennent à  root:root  et l’utilisateur root du client est reconnu comme  nobody  . Corrigeons donc ce problème de droits. Sur le serveur vm-serveur, faites :

$ sudo mkdir /export/home/etienne #Sur mon client, mon utilisateur est etienne

$ sudo chown 1000:1000 /export/home/etienne #Sur mon client, UID et GID de l’utilisateur etienne

$ sudo chown nobody:nogroup /export/share

Retournez sur le client, vous pouvez maintenant écrire dans  /mnt/reseau/home/etienne  et tous vos fichiers appartiennent à votre utilisateur en cours. Vous pouvez aussi écrire dans  /mnt/reseau/shared  et tous les fichiers que vous écrivez appartiennent à  nobody  .

Une des grandes forces de NFS c’est de respecter les droits UNIX. Depuis Linux, sur un partage NFS, vous pouvez donc faire quasiment tout ce que vous feriez sur un système de fichiers local. L’inconvénient, c’est qu’il faut s’assurer que sur toutes les machines de notre réseau vous avez les mêmes UID pour tous les utilisateurs. Si Etienne a l’UID 1000 sur un client, il doit avoir l’UID 1000 sur tous les clients. Si Marie a l’UID 1000 sur un poste client, elle pourra accéder aux fichiers d’Etienne depuis ce poste !

NFS est un outil puissant pour partager des fichiers dans un réseau UNIX. Malheureusement, s’il est parfaitement intégré sur Linux, il n’est pas disponible nativement sous Windows. Aussi, si votre réseau comporte des clients Windows, vous préférerez peut-être utiliser Samba, que nous allons découvrir ensemble, dans la partie suivante.

En résumé